package com.xiangwushuo.support.secret;

import com.lib.common.helper.api.secret.SignUtils
import com.lib.framework.manager.ContextManager
import java.text.SimpleDateFormat
import java.util.*

/**
 * 文 件 名: BaseEncrypReq
 * 创 建 人: XiaQiBo
 * 创建日期: 2019/7/2 22:01
 * 邮   箱: bob.xia@xiangwushuo.com
 * 文件说明：使用api加密算法的参数实体父类
 *          创建对象初始化好数据之后一定要调用 createSignature() 生成签名
 */
abstract class BaseEncrypReq {

    val timestamp: String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss ", Locale.getDefault())
        .format(Date(System.currentTimeMillis()))
    val version: String = "2.0"
    val appId: String = SecretUtil.getAppId()
    var signature: String = ""

    /**
     * 生成签名
     */
    fun createSignature() {
        val secretParamsMap = mutableMapOf<String, String>()
        secretParamsMap["appId"] = appId
        secretParamsMap["version"] = version
        secretParamsMap["timestamp"] = timestamp

        // 添加子类需要参与加密的参数
        addSecretParams(secretParamsMap)

        val secret = SecretUtil.getSecret(ContextManager.applicationContext)
        signature = SignUtils.signRequest(secretParamsMap, secret, "MD5")
    }

    /**
     * 增加需要参与加密的参数
     */
    protected abstract fun addSecretParams(secretParamsMap: MutableMap<String, String>)
}